﻿#ifndef SCRIPTREADER_H
#define SCRIPTREADER_H

#include <QObject>
#include <QJsonArray>
#include <QJsonObject>



QT_BEGIN_NAMESPACE

// 一级Key GuideWaySheet
#define CONFIG_GUIDEWAY_SHEET_KEY (u8"GuideWaySheet")
// 二级key
#define CONFIG_GUIDEWAY_SHEET_TRACK_ID_KEY (u8"GuideWaySheet_TrackId")
#define CONFIG_GUIDEWAY_SHEET_EDGE_ID_KEY (u8"GuideWaySheet_EdgeId")
#define CONFIG_GUIDEWAY_SHEET_EDGE_START_OFFSET_KEY (u8"GuideWaySheet_EdgeStartOffset")

// 一级Key DataSheet
#define CONFIG_DATA_SHEET_KEY (u8"DataSheet")
// 二级key
#define CONFIG_SHEET_NAME_KEY (u8"SheetsName")
#define CONFIG_DATA_STRUCT_KEY (u8"DataStruct")
// 三级key
#define CONFIG_DATA_SHEET_DIRECTION_KEY (u8"DataSheet_Direction")
#define CONFIG_DATA_SHEET_TRACK_ID_KEY (u8"DataSheet_TrackId")
#define CONFIG_DATA_SHEET_TRACK_OFFSET_KEY (u8"DataSheet_TrackOffset")
#define CONFIG_DATA_SHEET_SPEED_KEY (u8"DataSheet_Speed")


// 一级Key LogFile
#define CONFIG_LOG_FILE_KEY (u8"LogFile")
// 二级key
#define CONFIG_CYCLE_FEATURES_KEY (u8"CycleFeatures")          // 周期特征
#define CONFIG_CYCLE_VALUES_KEY (u8"Values")                   // 周期值
// 三级key
#define CONFIG_VAR_FORMAT_KEY (u8"Format")                     // 变量格式
#define CONFIG_LINE_FEATURES_KEY (u8"LineFeatureString")       // 行特征

// 一级Key DrawingInfo
#define CONFIG_DRAWING_INFO_KEY (u8"DrawingInfo")
// 二级key
#define CONFIG_TITLE_KEY (u8"Title")                    // 标题
#define CONFIG_RANGE_KEY (u8"Range")                    // 范围
#define CONFIG_CURVES_KEY (u8"Curves")                  // 曲线
// 三级key
#define CONFIG_CURVE_NAME_KEY (u8"Name")                // Curve name
#define CONFIG_AXIS_X_KEY (u8"X轴")                      // X轴
#define CONFIG_AXIS_Y_KEY (u8"Y轴")                      // Y轴
#define CONFIG_FROM_LOG_KEY (u8"FromLog")               // Fromlog
#define CONFIG_FROM_DATA_SHEET_KEY (u8"FromDataSheet")  // FromDataSheet
#define CONFIG_COLORS_KEY (u8"Colors")                  // 颜色

// 一级key
#define CONFIG_UI_CONFIG_KEY (u8"UI_CONFIG")             // UI配置



class ScriptReader : public QObject
{
    Q_OBJECT
public:
    typedef struct _curve_info {
        QString source;
        QString name;
        QString x_formula;
        QString y_formula;
        QString color;
    }CurveInfo;

    typedef struct _data_sheet_info {
        QString sheet_name;
        QHash<QString, int> data_dict;
    }DataSheetInfo;

public:
    explicit ScriptReader(QObject *parent = nullptr);

    // 打开脚本文件，设置成员属性m_jsObj
    bool openFile(const QString& filePath);
    // 获取曲线列表
    QVector<ScriptReader::CurveInfo> getCurveInfo();
    // 获取坐标轴显示标题
    QString getAxisTitle(const QString& axis) const;
    // 获取坐标轴范围
    QVector<int> getAxisRange(const QString& axis);
    // 获取guideway sheet配置
    QHash<QString, int> getGuideWaySheetConfig();
    // 获取data sheet配置
    ScriptReader::DataSheetInfo getDataSheetConfig();
    // 获取周期特征
    QString getCycleFeatures() const;
    // 获取周期数组
    QJsonArray getCycleValues() const;
    // 获取guideway中trackid配置列
    int getTrackIDCol() const;
    // 获取日志中配置对象
    QString getComboboxVarNameFromLog() const;


signals:

private:
    // 获取UI配置
    QJsonArray getUIConfig() const;
    // 获取X轴计算公式字符串
    QString getAxisXCaculationFormatString(const QString& key) const;

private:
    QJsonObject m_guideway_sheet_object;
    QJsonObject m_data_sheet_object;
    QJsonObject m_log_file_object;
    QJsonObject m_drawing_info_object;
    QJsonArray m_ui_config_array;
};

QT_END_NAMESPACE

#endif // SCRIPTREADER_H
